package com.naiterui.ehp.bp.domain;

import static javax.persistence.GenerationType.IDENTITY;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;
import lombok.ToString;

/**
 * 医生问诊评价记录里实体
 *
 * @author Amber
 * @since 1.0.0
 */

@Entity
@ToString
@Table(name = "dr_consult_comment")
public class DrConsultComment implements Serializable {

    /**
     * 字段或域定义：<code>serialVersionUID</code>
     */
    private static final long serialVersionUID = 4435979762161646681L;

    /**
     * 是否匿名评论：1：否，2：是
     */
    public static final int WAC_ANONYMITY = 2;
    public static final int WAC_NO_ANONYMITY = 1;
    /**
     * 主键：<code>id</code>
     */
    private Long id;

    /**
     * 医生id：<code>doctorId</code>
     */
    private Long doctorId;

    /**
     * 患者id：<code>patientId</code>
     */
    private Long patientId;

    /**
     * 问诊会话id：<code>consultSessionId</code>
     */
    private Long consultSessionId;

    /**
     * 问诊类型：<code>consultType</code>
     */
    private Integer consultType;

    /**
     * 星级：<code>starLevel</code>
     */
    private Integer starLevel;

    /**
     *  医生回复
     */
    private String reply;

    /**
     * 备注：<code>remark</code>
     */
    private String remark;

    /**
     * 评价状态
     */
    private Integer status;

    /**
     * 评价内容
     */
    private String commentContent;

    /**
     * 当时诊断（疾病）
     */
    private String diagnosis;

    /**
     * 是否匿名评论：1：否，2：是
     */
    private Integer wac;

    /**
     * 创建时间：<code>createdAt</code>
     */
    private Date createdAt;

    /**
     * 创建人：<code>createdBy</code>
     */
    private String createdBy;

    /**
     * 更新时间
     */
    private Date changedAt;

    /**
     * 更新人
     */
    private String changedBy;

    private Integer version;

    public DrConsultComment() {
    }

    public DrConsultComment(Long doctorId, Long patientId, Long consultSessionId, Integer starLevel) {
        this.doctorId = doctorId;
        this.patientId = patientId;
        this.consultSessionId = consultSessionId;
        this.starLevel = starLevel;
        createdAt = new Date();
        createdBy = patientId.toString();
    }

    /**
     * @return Long 取得域 id 的方法。
     */
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Long getId() {
        return id;
    }

    /**
     * @param id 对域 id 的设置方法.
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return Long 取得域 doctorId 的方法。
     */
    @Column(name = "doctor_id", nullable = false)
    public Long getDoctorId() {
        return doctorId;
    }

    /**
     * @param doctorId 对域 doctorId 的设置方法.
     */
    public void setDoctorId(Long doctorId) {
        this.doctorId = doctorId;
    }

    /**
     * @return Long 取得域 patientId 的方法。
     */
    @Column(name = "patient_id", nullable = false)
    public Long getPatientId() {
        return patientId;
    }

    /**
     * @param patientId 对域 patientId 的设置方法.
     */
    public void setPatientId(Long patientId) {
        this.patientId = patientId;
    }

    /**
     * @return Long 取得域 consultSessionId 的方法。
     */
    @Column(name = "consult_session_id", nullable = false)
    public Long getConsultSessionId() {
        return consultSessionId;
    }

    /**
     * @param consultSessionId 对域 consultSessionId 的设置方法.
     */
    public void setConsultSessionId(Long consultSessionId) {
        this.consultSessionId = consultSessionId;
    }

    @Column(name = "consult_type", nullable = false)
    public Integer getConsultType() {
        return consultType;
    }

    public void setConsultType(Integer consultType) {
        this.consultType = consultType;
    }

    /**
     * @return Integer 取得域 starLevel 的方法。
     */
    @Column(name = "star_level", nullable = false)
    public Integer getStarLevel() {
        return starLevel;
    }

    /**
     * @param starLevel 对域 starLevel 的设置方法.
     */
    public void setStarLevel(Integer starLevel) {
        this.starLevel = starLevel;
    }

    /**
     * @return String 取得域 remark 的方法。
     */
    @Column(name = "remark")
    public String getRemark() {
        return remark;
    }

    /**
     * @param remark 对域 remark 的设置方法.
     */
    public void setRemark(String remark) {
        this.remark = remark;
    }

    /**
     * @return Date 取得域 createdAt 的方法。
     */
    @Column(name = "created_at")
    public Date getCreatedAt() {
        return createdAt;
    }

    /**
     * @param createdAt 对域 createdAt 的设置方法.
     */
    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    /**
     * @return String 取得域 createdBy 的方法。
     */
    @Column(name = "created_by")
    public String getCreatedBy() {
        return createdBy;
    }

    /**
     * @param createdBy 对域 createdBy 的设置方法.
     */
    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    /**
     * @return String 取得域 status 的方法
     */
    @Column(name = "status")
    public Integer getStatus() {
        return status;
    }

    /**
     * @param status 对域 status 的设置方法.
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    /**
     * @return String 取得域 commentContent 的方法
     */
    @Column(name = "comment_content")
    public String getCommentContent() {
        return commentContent;
    }

    /**
     * @param commentContent 对域 commentContent 的设置方法.
     */
    public void setCommentContent(String commentContent) {
        this.commentContent = commentContent;
    }

    @Column(name = "diagnosis")
    public String getDiagnosis() {
        return diagnosis;
    }

    public void setDiagnosis(String diagnosis) {
        this.diagnosis = diagnosis;
    }

    @Column(name = "wac")
    public Integer getWac() {
        return wac;
    }

    public void setWac(Integer wac) {
        this.wac = wac;
    }

    @Column(name = "reply")
    public String getReply() {
        return reply;
    }

    public void setReply(String reply) {
        this.reply = reply;
    }

    @Column(name = "changed_at")
    public Date getChangedAt() {
        return changedAt;
    }

    public void setChangedAt(Date changedAt) {
        this.changedAt = changedAt;
    }

    @Column(name = "changed_by")
    public String getChangedBy() {
        return changedBy;
    }



    public void setChangedBy(String changedBy) {
        this.changedBy = changedBy;
    }

    @Version
    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }
}
